class Solution {
public:
    bool canJump(vector<int>& nums) {
        int left = 0, right = 0, maxPos = 0;
        while (left <= right)
        {
            if (maxPos >= nums.size() - 1) return true;

            for (int i = left; i <= right; i++)
            {
                maxPos = max(maxPos, i + nums[i]);
            }
            left = right + 1;
            right = maxPos;
        }

        return false;
    }
};